import { Bbox } from "../view/calcLayout/type";

//计算列框
export const calcRowBox = (bboxes: Array<{ bbox: Bbox }>) => {
  let minX = bboxes[0].bbox[0];
  let minY = bboxes[0].bbox[1];
  let maxX = bboxes[0].bbox[2];
  let maxY = bboxes[0].bbox[3];

  for (let i = 1; i < bboxes.length; i++) {
    minX = Math.min(minX, bboxes[i].bbox[0]);
    minY = Math.min(minY, bboxes[i].bbox[1]);
    maxX = Math.max(maxX, bboxes[i].bbox[2]);
    maxY = Math.max(maxY, bboxes[i].bbox[3]);
  }

  return [minX, minY, maxX, maxY];
}
/**
 * @description 根据bbox计算两个框是否相交
 */
export const doRectanglesIntersect = (boxA: Bbox, boxB: Bbox) => {
  return (
    boxA[0] <= boxB[2] && // boxA 的 x_min 小于或等于 boxB 的 x_max
    boxA[2] >= boxB[0] && // boxA 的 x_max 大于或等于 boxB 的 x_min
    boxA[1] <= boxB[3] && // boxA 的 y_min 小于或等于 boxB 的 y_max
    boxA[3] >= boxB[1]   // boxA 的 y_max 大于或等于 boxB 的 y_min
  );
}

/**
* @description 检查矩形 bigBox 是否完全包含矩形 smallBox
*/
export const isRectangleACompletelyContainsB = (bigBox: Bbox, smallBox: Bbox) => {
  // 计算两个矩形的交叉区域
  const xOverlap = Math.max(0, Math.min(bigBox[2], smallBox[2]) - Math.max(bigBox[0], smallBox[0]));
  const yOverlap = Math.max(0, Math.min(bigBox[3], smallBox[3]) - Math.max(bigBox[1], smallBox[1]));
  const overlapArea = xOverlap * yOverlap;

  // 计算矩形 smallBox 的面积
  const smallBoxArea = (smallBox[2] - smallBox[0]) * (smallBox[3] - smallBox[1]);

  // 检查交叉区域的面积是否占 smallBox 面积的60%或以上
  return overlapArea / smallBoxArea >= 0.6;
}